home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / 6821pia.h < prev    next >
C/C++ Source or Header  |  2000-04-04  |  6KB  |  198 lines

  1. /**********************************************************************
  2.  
  3.     Motorola 6821 PIA interface and emulation
  4.  
  5.     This function emulates all the functionality of up to 4 M6821
  6.     peripheral interface adapters.
  7.  
  8. **********************************************************************/
  9.  
  10. #ifndef PIA_6821
  11. #define PIA_6821
  12.  
  13.  
  14. #define MAX_PIA 8
  15.  
  16.  
  17. /* this is the standard ordering of the registers */
  18. /* alternate ordering swaps registers 1 and 2 */
  19. #define    PIA_DDRA    0
  20. #define    PIA_CTLA    1
  21. #define    PIA_DDRB    2
  22. #define    PIA_CTLB    3
  23.  
  24. /* PIA addressing modes */
  25. #define PIA_STANDARD_ORDERING        0
  26. #define PIA_ALTERNATE_ORDERING        1
  27.  
  28. #define PIA_8BIT                    0
  29. #define PIA_16BIT                    2
  30.  
  31. #define PIA_LOWER                    0
  32. #define PIA_UPPER                    4
  33. #define PIA_AUTOSENSE                8
  34.  
  35. #define PIA_16BIT_LOWER                (PIA_16BIT | PIA_LOWER)
  36. #define PIA_16BIT_UPPER                (PIA_16BIT | PIA_UPPER)
  37. #define PIA_16BIT_AUTO                (PIA_16BIT | PIA_AUTOSENSE)
  38.  
  39. struct pia6821_interface
  40. {
  41.     mem_read_handler in_a_func;
  42.     mem_read_handler in_b_func;
  43.     mem_read_handler in_ca1_func;
  44.     mem_read_handler in_cb1_func;
  45.     mem_read_handler in_ca2_func;
  46.     mem_read_handler in_cb2_func;
  47.     mem_write_handler out_a_func;
  48.     mem_write_handler out_b_func;
  49.     mem_write_handler out_ca2_func;
  50.     mem_write_handler out_cb2_func;
  51.     void (*irq_a_func)(int state);
  52.     void (*irq_b_func)(int state);
  53. };
  54.  
  55.  
  56. void pia_unconfig(void);
  57. void pia_config(int which, int addressing, const struct pia6821_interface *intf);
  58. void pia_reset(void);
  59. int pia_read(int which, int offset);
  60. void pia_write(int which, int offset, int data);
  61. void pia_set_input_a(int which, int data);
  62. void pia_set_input_ca1(int which, int data);
  63. void pia_set_input_ca2(int which, int data);
  64. void pia_set_input_b(int which, int data);
  65. void pia_set_input_cb1(int which, int data);
  66. void pia_set_input_cb2(int which, int data);
  67.  
  68. /******************* Standard 8-bit CPU interfaces, D0-D7 *******************/
  69.  
  70. READ_HANDLER( pia_0_r );
  71. READ_HANDLER( pia_1_r );
  72. READ_HANDLER( pia_2_r );
  73. READ_HANDLER( pia_3_r );
  74. READ_HANDLER( pia_4_r );
  75. READ_HANDLER( pia_5_r );
  76. READ_HANDLER( pia_6_r );
  77. READ_HANDLER( pia_7_r );
  78.  
  79. WRITE_HANDLER( pia_0_w );
  80. WRITE_HANDLER( pia_1_w );
  81. WRITE_HANDLER( pia_2_w );
  82. WRITE_HANDLER( pia_3_w );
  83. WRITE_HANDLER( pia_4_w );
  84. WRITE_HANDLER( pia_5_w );
  85. WRITE_HANDLER( pia_6_w );
  86. WRITE_HANDLER( pia_7_w );
  87.  
  88. /******************* 8-bit A/B port interfaces *******************/
  89.  
  90. WRITE_HANDLER( pia_0_porta_w );
  91. WRITE_HANDLER( pia_1_porta_w );
  92. WRITE_HANDLER( pia_2_porta_w );
  93. WRITE_HANDLER( pia_3_porta_w );
  94. WRITE_HANDLER( pia_4_porta_w );
  95. WRITE_HANDLER( pia_5_porta_w );
  96. WRITE_HANDLER( pia_6_porta_w );
  97. WRITE_HANDLER( pia_7_porta_w );
  98.  
  99. WRITE_HANDLER( pia_0_portb_w );
  100. WRITE_HANDLER( pia_1_portb_w );
  101. WRITE_HANDLER( pia_2_portb_w );
  102. WRITE_HANDLER( pia_3_portb_w );
  103. WRITE_HANDLER( pia_4_portb_w );
  104. WRITE_HANDLER( pia_5_portb_w );
  105. WRITE_HANDLER( pia_6_portb_w );
  106. WRITE_HANDLER( pia_7_portb_w );
  107.  
  108. READ_HANDLER( pia_0_porta_r );
  109. READ_HANDLER( pia_1_porta_r );
  110. READ_HANDLER( pia_2_porta_r );
  111. READ_HANDLER( pia_3_porta_r );
  112. READ_HANDLER( pia_4_porta_r );
  113. READ_HANDLER( pia_5_porta_r );
  114. READ_HANDLER( pia_6_porta_r );
  115. READ_HANDLER( pia_7_porta_r );
  116.  
  117. READ_HANDLER( pia_0_portb_r );
  118. READ_HANDLER( pia_1_portb_r );
  119. READ_HANDLER( pia_2_portb_r );
  120. READ_HANDLER( pia_3_portb_r );
  121. READ_HANDLER( pia_4_portb_r );
  122. READ_HANDLER( pia_5_portb_r );
  123. READ_HANDLER( pia_6_portb_r );
  124. READ_HANDLER( pia_7_portb_r );
  125.  
  126. /******************* 1-bit CA1/CA2/CB1/CB2 port interfaces *******************/
  127.  
  128. WRITE_HANDLER( pia_0_ca1_w );
  129. WRITE_HANDLER( pia_1_ca1_w );
  130. WRITE_HANDLER( pia_2_ca1_w );
  131. WRITE_HANDLER( pia_3_ca1_w );
  132. WRITE_HANDLER( pia_4_ca1_w );
  133. WRITE_HANDLER( pia_5_ca1_w );
  134. WRITE_HANDLER( pia_6_ca1_w );
  135. WRITE_HANDLER( pia_7_ca1_w );
  136. WRITE_HANDLER( pia_0_ca2_w );
  137. WRITE_HANDLER( pia_1_ca2_w );
  138. WRITE_HANDLER( pia_2_ca2_w );
  139. WRITE_HANDLER( pia_3_ca2_w );
  140. WRITE_HANDLER( pia_4_ca2_w );
  141. WRITE_HANDLER( pia_5_ca2_w );
  142. WRITE_HANDLER( pia_6_ca2_w );
  143. WRITE_HANDLER( pia_7_ca2_w );
  144.  
  145. WRITE_HANDLER( pia_0_cb1_w );
  146. WRITE_HANDLER( pia_1_cb1_w );
  147. WRITE_HANDLER( pia_2_cb1_w );
  148. WRITE_HANDLER( pia_3_cb1_w );
  149. WRITE_HANDLER( pia_4_cb1_w );
  150. WRITE_HANDLER( pia_5_cb1_w );
  151. WRITE_HANDLER( pia_6_cb1_w );
  152. WRITE_HANDLER( pia_7_cb1_w );
  153. WRITE_HANDLER( pia_0_cb2_w );
  154. WRITE_HANDLER( pia_1_cb2_w );
  155. WRITE_HANDLER( pia_2_cb2_w );
  156. WRITE_HANDLER( pia_3_cb2_w );
  157. WRITE_HANDLER( pia_4_cb2_w );
  158. WRITE_HANDLER( pia_5_cb2_w );
  159. WRITE_HANDLER( pia_6_cb2_w );
  160. WRITE_HANDLER( pia_7_cb2_w );
  161.  
  162. READ_HANDLER( pia_0_ca1_r );
  163. READ_HANDLER( pia_1_ca1_r );
  164. READ_HANDLER( pia_2_ca1_r );
  165. READ_HANDLER( pia_3_ca1_r );
  166. READ_HANDLER( pia_4_ca1_r );
  167. READ_HANDLER( pia_5_ca1_r );
  168. READ_HANDLER( pia_6_ca1_r );
  169. READ_HANDLER( pia_7_ca1_r );
  170. READ_HANDLER( pia_0_ca2_r );
  171. READ_HANDLER( pia_1_ca2_r );
  172. READ_HANDLER( pia_2_ca2_r );
  173. READ_HANDLER( pia_3_ca2_r );
  174. READ_HANDLER( pia_4_ca2_r );
  175. READ_HANDLER( pia_5_ca2_r );
  176. READ_HANDLER( pia_6_ca2_r );
  177. READ_HANDLER( pia_7_ca2_r );
  178.  
  179. READ_HANDLER( pia_0_cb1_r );
  180. READ_HANDLER( pia_1_cb1_r );
  181. READ_HANDLER( pia_2_cb1_r );
  182. READ_HANDLER( pia_3_cb1_r );
  183. READ_HANDLER( pia_4_cb1_r );
  184. READ_HANDLER( pia_5_cb1_r );
  185. READ_HANDLER( pia_6_cb1_r );
  186. READ_HANDLER( pia_7_cb1_r );
  187. READ_HANDLER( pia_0_cb2_r );
  188. READ_HANDLER( pia_1_cb2_r );
  189. READ_HANDLER( pia_2_cb2_r );
  190. READ_HANDLER( pia_3_cb2_r );
  191. READ_HANDLER( pia_4_cb2_r );
  192. READ_HANDLER( pia_5_cb2_r );
  193. READ_HANDLER( pia_6_cb2_r );
  194. READ_HANDLER( pia_7_cb2_r );
  195.  
  196.  
  197. #endif
  198.